package com.renjiyue.GUI;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//使用TextField类实现简单的计算器
public class GUIDome11 {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    }
}

//这里设置是完成计算器元素的布局
class Calculator extends Frame {
    Calculator(){
        /*
        创建3个文件，并指向其初始大小分别为10个字符和15个字符的大小，这里使用的是TextField类的另一种构造方法 public TextField(int colums)
         */
        TextField num1 = new TextField(10);
        TextField num2 = new TextField(10);
        TextField num3 = new TextField(15);
        //创建等号按钮
        Button btnEqual = new Button("=");
        //给等号按钮加上监听，让点击按钮后有响应事件发生
        btnEqual.addActionListener(new MyMonitor4(num1,num2,num3));
        //"+"是一个静态文本，所以使用Label类创建一个静态文本对象
        Label lbPlus = new Label("+");
        //把Frame默认的BorderLayout布局改成FlowLayout布局
        setLayout(new FlowLayout());
        add(num1);
        add(lbPlus);
        add(num2);
        add(btnEqual);
        add(num3);
        pack();
        setVisible(true);
    }
}
class MyMonitor4 implements ActionListener{
    /*
    为了使对按钮的监听能够对文本框起作用
    所以在自定义类MyMonitor里面定义三个TextField类型的对象num1 num2 num3
    并且定义MyMonitor类的构造方法，这个构造方法带有三个TextFirld累心的参数
    用于接受从TFFrame类里面的传递过来的三个TextFirld类型的参数
    然后把接收到的三个TextField类型的参数赋值在本类中声明的三个TextField类型的参数num1 num2 num3
    然后再把接收到的三个TextField类型的参数赋值给本类中声明的三个textField类型的参数num1 num2 num3
    然后再在actionPerformed()方法里面处理num1 num2 num3
     */
    TextField num1 , num2 , num3;
    public MyMonitor4(TextField num1,TextField num2,TextField num3){
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    }
    //事件相关信息都封装在了对象e里面，通过对象e的相关方法就可以获取事件的相关信息
    @Override
    public void actionPerformed(ActionEvent e) {
        //num对象调用getText()方法取得自己显示的文本字符串
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        /*
        num3对象调用setText()方法设置自己的显示文本
        字符串与任意类型的数据使用"+"连接是得到的一定是字符串
        这里使用一个空字符串与int类型的数连接，这样就可以直接把(n1+n2)得到的int类型的数隐式2的转换成字符串了
        这是把别的基础数据类型转换成字符串的一个1小技巧
        也可以使用"String.valueof((n1+n2))"把n1+n2的int型转换成字符串
         */
        num3.setText(""+(n1+n2));
        //num3.setText(String.valueOf((n1+n2));
        //计算结束后清空num1,num2文本框里面的内容
        num1.setText("");
        num2.setText("");
    }
}